默认初始化和值初始化一一对应
前提知识
声明: 在环境/上下文中指定一个变量的名字。也就是说,声明仅仅是让编译器知道,而没有实际分配空间。
初始化:给一个声明后尚未初始化的变量一个有意义的初始值。
赋值 : 销毁一个变量原来的值,并赋予一个新值。相当于改变了一个变量的状态。
默认初始化:
对象可能产生未定义的值(是否绝对尚待确定,例如类类型(定义了默认构造函数)的默认初始化是否属于值初始化等)。
值初始化:
对象的值是确定(预设)的。
值初始化出现场景:
1.数组初始化时初始值数量小于维度,剩下的元素会进行值初始化;
2.当我们不使用初始值定义一个静态变量;
3.形如T()的表达式显示地请求值初始化;
4.只提供vector对象容纳的元素数量而略去初始值,此时库会创建一个值初始化的元素初值(c++ primer p88)
默认初始化出现场景:
1.块作用域内不使用任何初始值定义一个非静态变量;
2.类通过默认构造函数来控制默认初始化过程,默认构造函数以如下规则初始化类的数据成员
- 如果存在类内初始值,用它来初始化成员
- 否则,默认初始化该成员
直接初始化和拷贝初始化一一对应
直接初始化:
直接调用与实参匹配的构造函数,形式如“T t(u)”。
拷贝初始化:
拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个临时对象复制到正在创建的对象”,形式如“T t=u”。